'use strict';

const semver =require('semver') //版本号检查工具
const colors = require('colors/safe') //颜色工具
const log = require('@hjx-cli-lerna/log')//日志输出工具
const { isObject } = require('@hjx-cli-lerna/utils')
const LOWEST_NODE_VERSION = '12.0.0';
class Command {
  constructor(argv) {
    // log.verbose('Command constructor',argv)
    if(!argv) throw new Error('参数不能为空！');
    if(!Array.isArray(argv)) throw new Error('参数必须为数组！');
    if(argv.length < 1) throw new Error('参数列表为空！')
    this._argv = argv;
    let runner = new Promise((resolve, reject) => {
      let chain = Promise.resolve();
      chain = chain.then(()=> this.checkNodeVersion());
      chain = chain.then(() => this.initArgs())
      chain = chain.then(()=> this.init())
      chain = chain.then(()=> this.exec())
      chain.catch(err=>{
        log.error(err.message);
      })
    })

  }

  initArgs() {
    this._cmd = this._argv[this._argv.length - 1]
    this._argv = this._argv.slice(0, this._argv.length - 1)
  }

  //检查node版本
  checkNodeVersion(){
    //获取当前版本号
    const currentVersion = process.version;
    //对比最低版本号
    const lowestVersion = LOWEST_NODE_VERSION
    if(!semver.gte(currentVersion, lowestVersion)) {
      throw new Error(colors.red(`@hjx-cli 需要安装v${lowestVersion}以上版本的 Node.js`))
    }
  }

  init(){
    throw new Error('init必须实现')
  }
  exec(){
    throw new Error('exec必须实现')
  }
}
module.exports = Command;